package com.ms.qw.domain.model;

import com.ms.qw.enums.*;
import com.ms.support.domain.IdentifiedAuditableDomainObject;
import org.hibernate.annotations.*;

import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Parameter;
import javax.persistence.Table;
import java.util.Set;

@Entity
@Table(name = "PRMAERECETA", schema = "EQSIGEPSA")
public class Receta extends IdentifiedAuditableDomainObject {

    @Id
    @GeneratedValue
    @Column(name = "iCodReceta", columnDefinition = "int")
    private Integer codigo;

    @Column(name = "vCodRecetaQW", columnDefinition = "varchar(10)")
    private String codigoQW;


    @Column(name = "cCodRegion", columnDefinition = "char(1)")
    private String regionAlimentaria;


    @Column(name = "iCodTipoReceta", columnDefinition = "int")
    private Integer codigoTipoReceta;


    @Column(name = "iCodCatReceta")
    private Integer codigoCategoriaReceta;


    @Column(name = "iCodClaseReceta")
    private Integer codigoClaseReceta;

    @Column(name = "vNombreReceta")
    private String nombre;

    @Column(name = "vAlias")
    private String alias;

    @Column(name = "cEstado", columnDefinition = "char(1)")
    private String estado;

    @Column(name = "iOrden")
    private Integer orden;


    @OneToMany(mappedBy = "receta", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<RecetaDetalle> detalle;


    public Set<RecetaDetalle> getDetalle() {
        return detalle;
    }

    public void setDetalle(Set<RecetaDetalle> detalle) {
        this.detalle = detalle;
    }

    public String getCodigoQW() {
        return codigoQW;
    }

    public void setCodigoQW(String codigoQW) {
        this.codigoQW = codigoQW;
    }

    public Integer getCodigo() {
        return codigo;
    }

    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getAlias() {
        return alias;
    }

    public void setAlias(String alias) {
        this.alias = alias;
    }

    public String getRegionAlimentaria() {
        return regionAlimentaria;
    }

    public void setRegionAlimentaria(String regionAlimentaria) {
        this.regionAlimentaria = regionAlimentaria;
    }

    public Integer getCodigoTipoReceta() {
        return codigoTipoReceta;
    }

    public void setCodigoTipoReceta(Integer codigoTipoReceta) {
        this.codigoTipoReceta = codigoTipoReceta;
    }

    public Integer getCodigoCategoriaReceta() {
        return codigoCategoriaReceta;
    }

    public void setCodigoCategoriaReceta(Integer codigoCategoriaReceta) {
        this.codigoCategoriaReceta = codigoCategoriaReceta;
    }

    public Integer getCodigoClaseReceta() {
        return codigoClaseReceta;
    }

    public void setCodigoClaseReceta(Integer codigoClaseReceta) {
        this.codigoClaseReceta = codigoClaseReceta;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public Integer getOrden() {
        return orden;
    }

    public void setOrden(Integer orden) {
        this.orden = orden;
    }

    public void buildCodigoQW(Integer sequencial) {
        StringBuilder sb = new StringBuilder();
        sb.append("R").append(regionAlimentaria);
        sb.append(TipoCategoriaReceta.findByCode(codigoCategoriaReceta).getAlias()).append(sequencial);
        sb.append(TipoClaseRacion.findByCode(codigoClaseReceta).getAlias());
        setCodigoQW(sb.toString());
    }
}
